package CLIENT.Station;

import java.util.HashSet;
import java.util.Set;

public enum EnumRegion {

	// Objets directement construits
	REGIONA("RegionA"), REGIONB("RegionB"), REGIONC("RegionC");

	private static Set<UnorderedPair<EnumRegion>> NEIGHBORS_RELATIONSHIPS = new HashSet<UnorderedPair<EnumRegion>>();
	static {
		NEIGHBORS_RELATIONSHIPS.add(new UnorderedPair<EnumRegion>(REGIONA,
				REGIONB));
		NEIGHBORS_RELATIONSHIPS.add(new UnorderedPair<EnumRegion>(REGIONB,
				REGIONC));
	}

	private String nomRegion;

	// Constructeur
	EnumRegion(String pNomStation) {
		nomRegion = pNomStation;
	}

	/**
	 * @return Le nom de la r?gion.
	 */
	public String getNomRegion() {
		return nomRegion;
	}

	/**
	 * Indique si deux r?gions sont voisines.
	 * 
	 * @param region1
	 *            Une r?gion.
	 * @param region2
	 *            Une autre r?gion.
	 * @return <code>true</code> si les r?gions sont voisines,
	 *         <code>false</code> sinon.
	 */
	public static boolean areNeighbors(final EnumRegion region1,
			final EnumRegion region2) {
		return NEIGHBORS_RELATIONSHIPS.contains(new UnorderedPair<EnumRegion>(
				region1, region2));
	}
	
	private static class UnorderedPair<T> {

		private final Set<T> values;

		public UnorderedPair(final T pSomeElement, final T pSomeOtherElement) {
			values = new HashSet<T>();
			values.add(pSomeElement);
			values.add(pSomeOtherElement);
		}

		public Set<T> values() {
			return values;
		}

		@Override
		public boolean equals(Object obj) {
			return obj != null && obj instanceof UnorderedPair<?>
					&& values.equals(((UnorderedPair<?>) obj).values());
		}

		@Override
		public int hashCode() {
			return values.hashCode();
		}
		
	}

}
